home *** CD-ROM | disk | FTP | other *** search
-
- /*
-
- poptask_plugin: part of the EasyPLUGINs package
-
- TO DO:
-
- work out some scheme for size-ing listview gui to
- match the strgadggets width
- add app- stuff for strgadget ??
-
- */
-
- OPT MODULE, OSVERSION=37
-
- ->> poptask_plugin: modules
-
- MODULE 'tools/easygui', 'intuition/intuition',
- 'graphics/text', 'intuition/gadgetclass',
- 'gadtools', 'libraries/gadtools',
- 'utility', 'utility/tagitem',
- 'tools/textlen'
-
- MODULE 'exec/nodes', 'exec/execbase', 'exec/lists',
- 'exec/tasks', 'amigalib/lists'
-
- MODULE 'easyplugins/dclistview'
-
- -><
-
- ->> poptask_plugin: definitions
-
- CONST NAME_LENGTH=64
-
- EXPORT OBJECT poptask_plugin OF plugin PRIVATE
-
- but_contents:PTR TO CHAR
- str_contents[NAME_LENGTH]:ARRAY OF CHAR
- case_sensitive
- remove_duplicates
- listview_x, listview_y
- disabled
-
- but_width
-
- gad_str:PTR TO gadget
- gad_but:PTR TO gadget
-
- font:PTR TO textattr
-
- iaddress
-
- tasks:PTR TO mlh
-
- ENDOBJECT
-
- OBJECT task_node OF ln
-
- task_name[NAME_LENGTH]:ARRAY OF CHAR
-
- ENDOBJECT
-
- -> PROGRAMMER_ID | MODULE_ID
- -> $01 | $06
-
-
- EXPORT ENUM PLA_PopTask_ButtonText=$81006001, ->[ISG]
- PLA_PopTask_StringText, ->[ISG]
- PLA_PopTask_CaseSensitive, ->[ISG]
- PLA_PopTask_RemoveDuplicates, ->[ISG]
- PLA_PopTask_ListViewX, ->[I..]
- PLA_PopTask_ListViewY, ->[I..]
- PLA_PopTask_Disabled ->[ISG]
-
- -><
-
- /* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& */
-
- ->> poptask_plugin: poptask() & end()
-
- PROC poptask(tags:PTR TO tagitem) OF poptask_plugin
-
- IF utilitybase
-
- self.but_contents := GetTagData(PLA_PopTask_ButtonText, 'Task...', tags)
-
- AstrCopy(self.str_contents, GetTagData(PLA_PopTask_StringText, '', tags))
-
- self.case_sensitive := GetTagData(PLA_PopTask_CaseSensitive, FALSE, tags)
- self.remove_duplicates := GetTagData(PLA_PopTask_RemoveDuplicates, TRUE, tags)
-
- self.listview_x := GetTagData(PLA_PopTask_ListViewX, 15, tags)
- self.listview_y := GetTagData(PLA_PopTask_ListViewY, 6, tags)
-
- self.disabled := GetTagData(PLA_PopTask_Disabled, FALSE, tags)
-
- ELSE
-
- Raise("util")
-
- ENDIF
-
- NEW self.tasks
-
- newList(self.tasks)
-
- ENDPROC
-
- PROC end() OF poptask_plugin
-
- poptask_private_clear(self)
-
- END self.tasks
-
- ENDPROC
- -><
-
- ->> poptask_plugin: set() & get()
-
- PROC set(attr, value) OF poptask_plugin
-
- SELECT attr
-
- CASE PLA_PopTask_ButtonText
-
- IF self.but_contents<>value
-
- self.but_contents:=value
-
- IF self.gad_but AND self.gh.wnd
-
- Gt_SetGadgetAttrsA(self.gad_but, self.gh.wnd, NIL, [GA_TEXT, self.but_contents, TAG_DONE])
-
- ENDIF
-
- ENDIF
-
- CASE PLA_PopTask_StringText
-
- IF self.str_contents<>value
-
- AstrCopy(self.str_contents, value)
-
- IF self.gad_str AND self.gh.wnd
-
- Gt_SetGadgetAttrsA(self.gad_str, self.gh.wnd, NIL, [GTST_STRING, self.str_contents, TAG_DONE])
-
- ENDIF
-
- ENDIF
-
- CASE PLA_PopTask_CaseSensitive
-
- IF self.case_sensitive<>value THEN self.case_sensitive:=value
-
- CASE PLA_PopTask_RemoveDuplicates
-
- IF self.remove_duplicates<>value THEN self.remove_duplicates:=value
-
- CASE PLA_PopTask_Disabled
-
- IF self.disabled<>value
-
- self.disabled:=value
-
- IF ((self.gad_str AND self.gad_but) AND self.gh.wnd)
-
- Gt_SetGadgetAttrsA(self.gad_but, self.gh.wnd, NIL, [GA_DISABLED, self.disabled, TAG_DONE])
- Gt_SetGadgetAttrsA(self.gad_str, self.gh.wnd, NIL, [GA_DISABLED, self.disabled, TAG_DONE])
-
- ENDIF
-
- ENDIF
-
- ENDSELECT
-
- ENDPROC
-
- PROC get(attr) OF poptask_plugin
-
- SELECT attr
-
- CASE PLA_PopTask_ButtonText; RETURN self.but_contents, TRUE
- CASE PLA_PopTask_StringText; RETURN self.str_contents, TRUE
- CASE PLA_PopTask_CaseSensitive; RETURN self.case_sensitive, TRUE
- CASE PLA_PopTask_RemoveDuplicates; RETURN self.remove_duplicates, TRUE
- CASE PLA_PopTask_Disabled; RETURN self.disabled, TRUE
-
- ENDSELECT
-
- ENDPROC -1, FALSE
- -><
-
- /* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& */
-
- ->> poptask_plugin: min_size() & will_resize()
- PROC min_size(ta:PTR TO textattr, fh) OF poptask_plugin
-
- self.but_width:=textlen(self.but_contents,ta)+8
-
- ENDPROC (self.but_width+(fh*8)),(fh+6)
-
- PROC will_resize() OF poptask_plugin IS RESIZEX
- -><
-
- ->> poptask_plugin: gtrender() & clear_render()
- PROC gtrender(gl, vis, ta:PTR TO textattr, x, y, xs, ys, win:PTR TO window) OF poptask_plugin
-
- self.font:=ta
-
- self.gad_but:=CreateGadgetA(BUTTON_KIND, gl,
- [x, y, self.but_width, ys, self.but_contents, ta, 1, 0, vis, 0]:newgadget,
- [GA_DISABLED, self.disabled, TAG_DONE])
-
- self.gad_str:=CreateGadgetA(STRING_KIND, self.gad_but,
- [x+self.but_width+1, y, xs-self.but_width, ys, NIL, ta, 2, 0, vis, 0]:newgadget,
- [GA_DISABLED, self.disabled,
- GTST_MAXCHARS, NAME_LENGTH,
- GTST_STRING, self.str_contents,
- TAG_DONE])
-
- ENDPROC self.gad_str
-
- PROC clear_render(win:PTR TO window) OF poptask_plugin
-
- IF self.gad_str THEN AstrCopy(self.str_contents, self.gad_str.specialinfo::stringinfo.buffer)
-
- ENDPROC
-
- -><
-
- ->> poptask_plugin: message_test() & message_action()
- PROC message_test(imsg:PTR TO intuimessage, win:PTR TO window) OF poptask_plugin
-
- IF imsg.class=IDCMP_GADGETUP
-
- self.iaddress:=imsg.iaddress
-
- RETURN (imsg.iaddress=self.gad_but) OR (imsg.iaddress=self.gad_str)
-
- ENDIF
-
- ENDPROC FALSE
-
- PROC message_action(class, qual, code, win:PTR TO window) OF poptask_plugin
-
- DEF exec:PTR TO execbase, dclv:PTR TO dclistview,
- fnode:PTR TO task_node, node:PTR TO task_node, sel, a,
- found=FALSE
-
- IF self.iaddress=self.gad_but
-
- exec:=execbase
-
- Disable()
-
- poptask_private_snapshot(self, exec.taskwait.head)
- poptask_private_snapshot(self, exec.taskready.head)
-
- Enable()
-
- blockwin(self.gh)
-
- IF fnode:=FindName(self.tasks, self.str_contents)
-
- node:=self.tasks.head; a:=0
-
- WHILE (node<>NIL) AND (found=FALSE)
-
- IF fnode=node; found:=TRUE
- ELSE; node:=node.succ; a:=a+1
- ENDIF
-
- ENDWHILE
-
- ENDIF
-
- NEW dclv.dclistview([DCLV_RELX, self.listview_x,
- DCLV_RELY, self.listview_y,
- DCLV_LIST, self.tasks,
- DCLV_CURRENT, (IF fnode THEN a ELSE -1),
- DCLV_TOP, (IF fnode THEN a ELSE 0),
- TAG_DONE])
-
- easyguiA(NIL, [DCLIST, {poptask_private_listclick}, dclv, TRUE],
- [EG_WTYPE, WTYPE_NOBORDER,
- EG_SCRN, win.wscreen,
- EG_FONT, self.font,
- EG_LEFT, (win.leftedge + self.x),
- EG_TOP, (win.topedge + self.y + self.ys),
- TAG_DONE])
-
- sel:=dclv.get(DCLV_CURRENT)
-
- END dclv
-
- node:=self.tasks.head; a:=0
-
- WHILE node AND (a<sel)
-
- node:=node.succ; a:=a+1
-
- ENDWHILE
-
- IF node THEN self.set(PLA_PopTask_StringText, node.task_name)
-
- poptask_private_clear(self)
-
- unblockwin(self.gh)
-
- ELSEIF self.iaddress=self.gad_str
-
- AstrCopy(self.str_contents, self.gad_str.specialinfo::stringinfo.buffer)
-
- ENDIF
-
- self.iaddress:=NIL
-
- ENDPROC TRUE
- -><
-
- /* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& */
-
- ->> PRIVATE: clear(), snapshot() & compare()
- PROC poptask_private_clear(pt:PTR TO poptask_plugin)
-
- DEF node:PTR TO task_node, tnode:PTR TO task_node
-
- node:=pt.tasks.head
-
- WHILE tnode:=node.succ
-
- END node; node:=tnode
-
- ENDWHILE
-
- newList(pt.tasks)
-
- ENDPROC
-
- PROC poptask_private_snapshot(pt:PTR TO poptask_plugin, exectask:PTR TO tc)
-
- DEF tnode:PTR TO task_node, node:PTR TO task_node,
- inserting, result
-
- WHILE exectask.ln.succ
-
- NEW tnode
-
- AstrCopy(tnode.task_name, exectask.ln.name, NAME_LENGTH)
- tnode.name:=tnode.task_name
-
- node:=pt.tasks.head
-
- IF (poptask_private_compare(pt, node.task_name, tnode.task_name)>0)
-
- AddHead(pt.tasks, tnode)
-
- ELSE
-
- inserting:=TRUE
-
- WHILE node.succ AND inserting
-
- node:=node.succ
-
- result:=poptask_private_compare(pt, node.task_name, tnode.task_name)
-
- IF (result=0) AND pt.remove_duplicates
-
- inserting:=FALSE
-
- ELSEIF (result>0)
-
- Insert(pt.tasks, tnode, node.pred)
-
- inserting:=FALSE
-
- ENDIF
-
- ENDWHILE
-
- IF inserting=TRUE THEN AddTail(pt.tasks, tnode)
-
- ENDIF
-
- exectask:=exectask.ln.succ
-
- ENDWHILE
-
- ENDPROC
-
- PROC poptask_private_compare(pt:PTR TO poptask_plugin, s:PTR TO CHAR, t:PTR TO CHAR)
-
- ENDPROC (IF pt.case_sensitive THEN Stricmp(s, t) ELSE Strnicmp(s, t, NAME_LENGTH))
- -><
-
- /* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& */
-
- ->> PRIVATE: poptask_private_listclick()
-
- PROC poptask_private_listclick(gh:PTR TO guihandle, dclv:PTR TO dclistview)
-
- DEF bool=FALSE, valid=FALSE
-
- bool, valid:=dclv.get(DCLV_CLICK)
-
- IF bool AND valid THEN quitgui()
-
- ENDPROC
-
- -><
-
- /* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& */
-
-